/**
 * Fichier de gestion de l'affichage des cellules
 */
function Vue(){
    //Constantes
    
    /**
     * Largeur du Canvas
     *
     * @type {Number}
     */
    this.LARGEUR_CANVAS = 800;
    /**
     * Hauteur du Canvas
     *
     * @type {Number}
     */
    this.HAUTEUR_CANVAS = 600;
    /**
     * Largeur de la zone de dessin du canvas
     *
     * @type {Number]
     */
    this.LARGEUR_ZONE_DESSIN = 800;
    /**
     * Hauteur de la zone de dessin du canvas
     *
     * @type {Number]
     */
    this.HAUTEUR_ZONE_DESSIN = 600;
    /**
     * Largeur de la zone de dessin du canvas
     *
     * @type {Number]
     */
    this.LARGEUR_ZONE_SLIDERS = 600;
    /**
     * Hauteur de la zone des sliders du canvas
     *
     * @type {Number]
     */
    this.HAUTEUR_ZONE_SLIDERS = 450;
    /**
     * Largeur de la zone des sliders du canvas
     *
     * @type {Number]
     */
    this.LARGEUR_ZONE_MENU = 600;
    /**
     * Hauteur de la zone de menu du canvas
     *
     * @type {Number]
     */
    this.HAUTEUR_ZONE_MENU = 450;
    /**
     * Longueur de la barre du slider
     *
     * @type {Number}
     */
    this.LONGUEUR_SLIDER = 100;
    //Variables
    this.canvas = document.getElementById('canvas');
    
    
    /**
     * Methode redessinant la zone d'evolution des cellules a partir
     * du monde passe en parametre
     * La methode trace un carre blanc qui recouvre le precedent dessin
     * et affiche ensuite les contenus du tableau du monde
     *
     * @param {Object} monde Monde a dessiner
     */
    this.paint = function(monde, canvas){
        var context = this.canvas.getContext("2d");
        context.fillStyle = "white";
        context.fillRect(0, 0, this.LARGEUR_ZONE_DESSIN, this.HAUTEUR_ZONE_DESSIN);
        for (var i = 0; i < monde.tabCellule.length; i++) {
            this.drawCellule(monde.tabCellule[i], this.canvas);
        }
        for (var i = 0; i < monde.tabMolecule.length; i++) {
            this.drawMolecule(monde.tabMolecule[i], this.canvas);
        }
        for (var i = 0; i < monde.tabCc.length; i++) {
            this.drawCc(monde.tabCc[i], this.canvas);
        }
    };
    
    /**
     * Dessine une cellule
     *
     * @param {Object} cellule Cellule a dessiner
     * @param {Object} canvas Canvas sur lequel dessiner la molecule
     */
    this.drawCellule = function(cellule, canvas){
        var contexte = canvas.getContext("2d");
        var x = cellule.x;
        var y = cellule.y;
        var nom = cellule.nom;
        var img = new Image();
        
        switch (nom) {
            case 'Brasseryte':
                img.src = 'entite/cellule1.gif';
                img.onload =  contexte.drawImage(img, x, y);
                     
                break;
            case 'Kommyte':
            	img.src = 'entite/cellule4.gif';
                img.onload =  contexte.drawImage(img, x, y);
                
                break;
            case 'Polakocyte':
            	img.src = 'entite/cellule3.gif';
                img.onload =  contexte.drawImage(img, x, y);
                
                break;
            case 'Samuelocyte':
            	img.src = 'entite/cellule2.gif';
                img.onload =  contexte.drawImage(img, x, y);
                
                break;
            case 'Zimbabwyte':
            	img.src = 'entite/cellule5.gif';
                img.onload =  contexte.drawImage(img, x, y);
                
                break;
            default:
                alert('Cellule inexistante : ' + nom);
                break;
        }
    };
    
    /**
     * Fonction qui permet de dessiner une molecule en fonction
     * de son type (donne par son nom) ainsi que sa position
     * (recuperee par l'objet
     *
     * @param {Object} molecule Molecule a dessiner
     * @param {Object} canvas Canvas sur lequel dessiner la molecule
     */
    this.drawMolecule = function(molecule, canvas){
        var contexte = canvas.getContext("2d");
        var img = new Image();
        var x = molecule.x;
        var y = molecule.y;
        var nom = molecule.nom;
        switch (nom) {
            case 'Haricoine':
            	img.src = 'entite/haricot.gif';
                img.onload =  contexte.drawImage(img, x, y);
                break;
            case 'Carottoine':
            	img.src = 'entite/carrotte.gif';
                img.onload =  contexte.drawImage(img, x, y);
                break;
            case 'Pommine':
            	img.src = 'entite/pomme.gif';
                img.onload =  contexte.drawImage(img, x, y);
                break;
            case 'Oppiomine':
            	img.src = 'entite/truc.gif';
                img.onload =  contexte.drawImage(img, x, y);
                break;
            case 'Bretoine':
            	img.src = 'entite/fraise.gif';
                img.onload =  contexte.drawImage(img, x, y);
                break;
            case 'Kiwine':
            	img.src = 'entite/kiwi.gif';
                img.onload =  contexte.drawImage(img, x, y);
                break;
            case 'Mongoloine':
            	img.src = 'entite/gooloum.gif';
                img.onload =  contexte.drawImage(img, x, y);
                break;
            default:
                alert('Molecule inexistante [Vue~l.233] : ' + nom);
                //TODO : creation d'une nouvelle molecule du nom donne par l'utilisateur + MAJ de la doc de la classe
                break;
        }
    };
    
    /**
     * Fonction qui permet de dessiner le Cc passe en
     * parametre
     *
     * @param {Object} cc Cyclamide Cruzeide a dessiner
     * @param {Object} canvas Canvas servant de support au dessin
     */
    this.drawCc = function(cc, canvas){
        var contexte = canvas.getContext("2d");
        var x = cc.x;
        var y = cc.y;
        var nom = cc.nom;
        var img = new Image();
        
        switch (nom) {
            case 'Acetone':
            	img.src = 'entite/acetone.gif';
                img.onload =  contexte.drawImage(img, x, y);
                break;
            case 'Acide sulfurique':
            	img.src = 'entite/sul.gif';
                img.onload =  contexte.drawImage(img, x, y);
                break;
            case 'Benzene':
            	img.src = 'entite/benzene.gif';
                img.onload =  contexte.drawImage(img, x, y);
                break;
            case 'Eau':
            	img.src = 'entite/eau.gif';
                img.onload =  contexte.drawImage(img, x, y);
                break;
            case 'Ethanol':
            	img.src = 'entite/ethanol.gif';
                img.onload =  contexte.drawImage(img, x, y);
                break;
            default:
                alert('Cc inexistant : ' + nom);
                //TODO : creation d'un nouveau cc du nom donne par l'utilisateur + MAJ de la doc de la classe
                break;
        }
    };
}

